home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Amiga
/
World of Amiga.iso
/
archive
/
assembly
/
juliasrc.lha
/
julia.s
< prev
next >
Wrap
Text File
|
1993-02-28
|
9KB
|
403 lines
**********************************************************************
incdir "sys:include/"
include "exec/exec_lib.i"
include "hardware/custom.i"
**********************************************************************
CALL MACRO
jsr _LVO\1(a6)
ENDM
**********************************************************************
rsset -4
PixelMask rs.w 1 ; mask to OR with bitplanes
WordsInRaster rs.w 1 ; number of words left in current raster
InitialX rs.w 1 ; inital x
InitialY rs.w 1 ; inital y
LinesLeft rs.w 1 ; number of lines left to draw
**********************************************************************
BootBlock: dc.b "DOS",0
dc.l "CKSM"
dc.l $370
movem.l d1-d7/a0-a6,-(a7)
CALL Forbid
CALL Disable
lea $dff000,a4
bsr.w WaitVBlank
lea $7c800,a5
move.l a5,cop2lc(a4)
clr.w copjmp2(a4)
move.w #$07e0,dmacon(a4)
move.w #$8240,dmacon(a4)
lea Copper(pc),a6
moveq #((Palette-Copper)/4)-1,d7
L2 move.l (a6)+,(a5)+
dbf d7,L2
move.w #$0180,d0 ; color 0
moveq #31,d7
L3 move.w d0,(a5)+
move.w (a6)+,(a5)+
addq.w #2,d0
dbf d7,L3
move.w #$00e0,d0 ; init bitplane pointers
moveq #0,d1
moveq #8,d7
L4 move.w d0,(a5)+
addq.w #2,d0
move.w #$0007,(a5)+
move.w d0,(a5)+
addq.w #2,d0
move.w d1,(a5)+
addi.w #256*40,d1
subq.l #2,d7
bpl.b L4
move.l d7,(a5)+ ; $fffffffe
move.l #$30d8a600,(a5)+ ; control words
MakeSprite move.w (a6)+,d7 ; get height/gap pair
bmi.b DoneSprite
move.w d7,d6
lsr.w #8,d7 ; extract height part
.heightloop move.w (a6)+,(a5)+ ; sprite data
clr.w (a5)+ ; clear plane 2
dbf d7,.heightloop
andi.w #$00ff,d6 ; extract gap part
.gaploop clr.l (a5)+ ; blank
dbf d6,.gaploop
bra.b MakeSprite
DoneSprite: move.l #$80000014,(a5)+ ; mask & word per raster count
StartJulia: lea $70000,a0
.1 btst.b #6,dmaconr(a4)
bne.b .1
move.l a0,bltdpt(a4)
move.l #$01000000,bltcon0(a4)
clr.w bltdmod(a4)
move.w #(640*64)+40,bltsize(a4)
FindJulia: move.l (a6)+,(a5)
bne.b GotJulia
lea JuliaData(pc),a6
bra.b FindJulia
GotJulia: lea Plot00+2(pc),a1
move.w (a5),(RasterInit-Plot00)(a1) ; initial m
move.w (a6),(a1) ; pixel step
move.w (a6)+,(RasterAdd-Plot00)(a1) ; raster step
move.w (a6)+,(Initial_C1-Plot00)(a1) ; initial c1
move.w (a6)+,(Initial_C2-Plot00)(a1) ; initial c2
move.l a6,((BootBlock+4)-(Plot00+2))(a1) ; save julia pointer
move.w #256,LinesLeft(a5) ; vertical height
move.w #256*40,d2
lea (a0,d2.w),a1
lea (a1,d2.w),a2
lea (a2,d2.w),a3
lea $04000000,a6 ; for magnitude test
.1 btst.b #6,dmaconr(a4)
bne.b .1
bsr.w WaitVBlank
move.w #$83a0,dmacon(a4)
lea (a3,d2.w),a4
PixelLoop: move.w InitialX(a5),d1 ; inital x
move.w InitialY(a5),d0 ; inital y
moveq #30,d7
Initial_C1: move.w #$0000,d4 ; initial c1
Initial_C2: move.w #$0000,d5 ; initial c2
move.w d0,d2
move.w d1,d3
bra.b CheckMagnitude
IterateJulia: sub.l d3,d2 ; x^2 - y^2
lsl.l #4,d2 ; fix decimal point
swap d2 ; ...
add.w d4,d2 ; x1 = x^2 - y^2 + c1
move.w d1,d3 ; y
muls d0,d3 ; x * y
lsl.l #5,d3 ; fix decimal point and multiply by 2
swap d3 ; ...
add.w d5,d3 ; y1 = 2 * x * y + c2
move.w d2,d0 ; x = x1
move.w d3,d1 ; y = y1
CheckMagnitude: muls d2,d2 ; x^2
muls d3,d3 ; y^2
move.l d2,d6
add.l d3,d6 ; z = x^2 + y^2
cmp.l a6,d6 ; escaped yet?
dbhi d7,IterateJulia
move.w PixelMask(a5),d6
moveq #0,d5
move.b JumpTable+1(pc,d7.w),d5
jmp JumpTable(pc,d5.w)
JumpTable: dc.b Plot00-JumpTable,Plot31-JumpTable
dc.b Plot30-JumpTable,Plot29-JumpTable
dc.b Plot28-JumpTable,Plot27-JumpTable
dc.b Plot26-JumpTable,Plot25-JumpTable
dc.b Plot24-JumpTable,Plot23-JumpTable
dc.b Plot22-JumpTable,Plot21-JumpTable
dc.b Plot20-JumpTable,Plot19-JumpTable
dc.b Plot18-JumpTable,Plot01-JumpTable
dc.b Plot16-JumpTable,Plot15-JumpTable
dc.b Plot14-JumpTable,Plot13-JumpTable
dc.b Plot12-JumpTable,Plot11-JumpTable
dc.b Plot10-JumpTable,Plot09-JumpTable
dc.b Plot08-JumpTable,Plot07-JumpTable
dc.b Plot06-JumpTable,Plot05-JumpTable
dc.b Plot04-JumpTable,Plot03-JumpTable
dc.b Plot02-JumpTable,Plot17-JumpTable
Plot22: or.w d6,(a4)
or.w d6,(a2)
or.w d6,(a1)
bra.b Plot00
Plot21: or.w d6,(a4)
or.w d6,(a2)
or.w d6,(a0)
bra.b Plot00
Plot20: or.w d6,(a4)
or.w d6,(a2)
bra.b Plot00
Plot18: or.w d6,(a4)
or.w d6,(a1)
bra.b Plot00
Plot26: or.w d6,(a4)
Plot10: or.w d6,(a3)
or.w d6,(a1)
bra.b Plot00
Plot23: or.w d6,(a4)
or.w d6,(a2)
or.w d6,(a1)
or.w d6,(a0)
bra.b Plot00
Plot19: or.w d6,(a4)
or.w d6,(a1)
or.w d6,(a0)
bra.b Plot00
Plot27: or.w d6,(a4)
Plot11: or.w d6,(a3)
or.w d6,(a1)
or.w d6,(a0)
bra.b Plot00
Plot17: or.w d6,(a4)
or.w d6,(a0)
bra.b Plot00
Plot25: or.w d6,(a4)
Plot09: or.w d6,(a3)
or.w d6,(a0)
bra.b Plot00
Plot29: or.w d6,(a4)
Plot13: or.w d6,(a3)
Plot05: or.w d6,(a2)
or.w d6,(a0)
bra.b Plot00
Plot16: or.w d6,(a4)
bra.b Plot00
Plot24: or.w d6,(a4)
Plot08: or.w d6,(a3)
bra.b Plot00
Plot28: or.w d6,(a4)
Plot12: or.w d6,(a3)
Plot04: or.w d6,(a2)
bra.b Plot00
Plot30: or.w d6,(a4)
Plot14: or.w d6,(a3)
Plot06: or.w d6,(a2)
Plot02: or.w d6,(a1)
bra.b Plot00
Plot31: or.w d6,(a4)
Plot15: or.w d6,(a3)
Plot07: or.w d6,(a2)
Plot03: or.w d6,(a1)
Plot01: or.w d6,(a0)
Plot00: addi.w #$0000,(a5) ; pixel "step"
ror.w PixelMask(a5) ; shift mask over
bpl.w PixelLoop
addq.w #2,a0
addq.w #2,a1
addq.w #2,a2
addq.w #2,a3
addq.w #2,a4
subq.w #1,WordsInRaster(a5) ; subtract from word counter
bne.w PixelLoop
btst.b #6,$bfe001
beq.b Exit
move.w #320/16,WordsInRaster(a5) ; words per raster
btst.b #2,$dff016 ; new julia?
beq.b NewJulia
RasterInit: move.w #$0000,(a5) ; inital raster value
RasterAdd: addi.w #$0000,InitialY(a5) ; raster "step"
subq.w #1,LinesLeft(a5)
bne.w PixelLoop
WaitMouse: btst.b #6,$bfe001
beq.b Exit
btst.b #2,$dff016
bne.b WaitMouse
NewJulia: movea.l BootBlock+4(pc),a6
lea $dff000,a4
.waitRMBup btst.b #2,$0016(a4)
beq.b .waitRMBup
bra.w StartJulia
Exit: lea $dff000,a4
bsr.b WaitVBlank
clr.w $0100(a4)
movem.l (a7)+,d1-d7/a0-a6
CALL Enable
CALL Permit
lea DosName(pc),a1
CALL FindResident
movea.l d0,a0
movea.l $16(a0),a0
moveq #0,d0
rts
WaitVBlank: btst.b #0,5(a4)
bne.b WaitVBlank
.1 btst.b #0,5(a4)
beq.b .1
rts
Copper: dc.l $01005200,$01020000,$01080000
dc.l $008e2981,$009029c1
dc.l $00920038,$009400d0
dc.l $01200007,$0122c8d0
Palette: dc.w $0000,$0831,$000e,$000d,$000c,$000b,$000a,$0009
dc.w $0008,$0007,$0106,$0205,$0304,$0403,$0502,$0611
dc.w $0720,$0fff,$0942,$0a53,$0b64,$0c75,$0d86,$0c97
dc.w $0ba8,$0a9a,$098b,$0879,$0767,$0555,$0343,$0131
SpriteData: dc.b 13,9
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000011110000000
dc.w %0000011110000000
dc.w %0000110011000000
dc.w %0000110011000000
dc.w %0001100001100000
dc.w %0001100001100000
dc.w %0001111111100000
dc.w %0011111111110000
dc.w %0011000000110000
dc.w %0011000000110000
dc.w %0110000000011000
dc.w %0110000000011000
dc.b 9,9 ; "n"
dc.w %0001100111000000
dc.w %0001101111100000
dc.w %0001110001100000
dc.w %0001100001100000
dc.w %0001100001100000
dc.w %0001100001100000
dc.w %0001100001100000
dc.w %0001100001100000
dc.w %0001100001100000
dc.w %0001100001100000
dc.b 9,5 ; "a"
dc.w %0000011111000000
dc.w %0000111011100000
dc.w %0000110001100000
dc.w %0000000011100000
dc.w %0000011111100000
dc.w %0000111001100000
dc.w %0000110001100000
dc.w %0000110001100000
dc.w %0000111011100000
dc.w %0000011101100000
dc.b 13,9 ; "l"
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.w %0000001100000000
dc.b 9,9 ; "o"
dc.w %0000011111000000
dc.w %0000111111100000
dc.w %0000110001100000
dc.w %0001100000110000
dc.w %0001100000110000
dc.w %0001100000110000
dc.w %0001100000110000
dc.w %0000110001100000
dc.w %0000111111100000
dc.w %0000011111000000
dc.b 13,0 ; "g"
dc.w %0000011110110000
dc.w %0000111111110000
dc.w %0000110000110000
dc.w %0001100000110000
dc.w %0001100000110000
dc.w %0001100000110000
dc.w %0001100000110000
dc.w %0000110001110000
dc.w %0000111111110000
dc.w %0000011110110000
dc.w %0000000000110000
dc.w %0000110001100000
dc.w %0000111111100000
dc.w %0000001110000000
dc.b -1,-1 ; end
JuliaData: dc.l $f800eb00
dc.w $0018,$0100,$0ad0,$ec00
dc.l $ef000010
dc.w $0600,$0100,$f226,$fd56
dc.l $0015ee00
dc.w $fb40,$ede2,$f0b2,$001d
dc.l $05c0ff00
dc.w $ef12,$e812,$001d,$f320
dc.l $fd21eeae
dc.w $0225,$000d,$f420,$fd43
dc.l $00000000
DosName: dc.b 'dos.library',0
BootLen equ *-BootBlock